﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcademiaDAO;
using AcademiaEntidades;
using System.Configuration;
using System.Web.Security;

public partial class Administracion_ProfesorWF : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Para controlar el botan para atras del navegador
        if (Session["Usuario"] == null)
            Response.Redirect("~/Publico/Login.aspx");
        if (!Page.IsPostBack)
        {
            //Oculto los paneles
            panelDatosProfesor.Visible = false;
            panelAltaProfesor.Visible = false;
            ViewState["Orden"] = "Nombre";
            cargarSesion();//Cargar los datos de session
        }
    }
    private void cargarSesion()
    {
        lblUsuarioLogueado.Text = ((Usuarios)Session["Usuario"]).Usuario;
        lblRolLogueado.Text = ((Usuarios)Session["Usuario"]).Rol;
    }
    protected void btnVolverBus_Click(object sender, EventArgs e)
    {
        //Vuelve a la pagina de inicio de Administracion
        Response.Redirect("~/Administracion/Administracion.aspx");
    }
    //Metodos para limpiar los textbox
    protected void limpiarBuscar()
    {
        txtLegajoBus.Text = string.Empty;
        txtNombreBus.Text = string.Empty;
        txtApellidoBus.Text = string.Empty;
        lblResultadoBus.Text = string.Empty;
    }
    protected void limpiarAlta()
    {
        txtNombreAlta.Text = string.Empty;
        txtApellidoAlta.Text = string.Empty;
        txtNroDocAlta.Text = string.Empty;
        txtTelAlta.Text = string.Empty;
        txtTituloAlta.Text = string.Empty;
        Session["IdProfesor"] = null;
        btnEliminar.OnClientClick = string.Empty;
    }
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        limpiarBuscar();
        panelDatosProfesor.Visible = false;
    }
    protected void btnLimpiarAlta_Click(object sender, EventArgs e)
    {
        limpiarAlta();
        ddlTipoDocAlta.ClearSelection();
        ddlTipoDocAlta.SelectedIndex = 0;
        lblResultadoMostrar.Text = string.Empty;
        lblResAlta.Text = string.Empty;
        limpiarBuscar();
        cargarGrilla();
    }
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        //Hago una validacion del lado del servidor
        if (!Page.IsValid)
        {
            lblResultadoBus.Text = "Debe ingresar un numero en el campo legajo";
            lblResultadoBus.ForeColor = System.Drawing.Color.Red;
            return;
        }
        
        cargarGrilla();
                
    }
    private void cargarGrilla()
    {
        //Declaro variables aux para almacenar lo que tienen los textbox
        List<ProfesorConsulta> listaProfesor = new List<ProfesorConsulta>();
        string nom = null;
        string ape = null;
        int? leg = null;
        if (txtNombreBus.Text != string.Empty)
            nom = txtNombreBus.Text;
        if (txtLegajoBus.Text != string.Empty)
            leg = int.Parse(txtLegajoBus.Text);
        if (txtApellidoBus.Text != string.Empty)
            ape = txtApellidoBus.Text;
        try
        {
            listaProfesor = ProfesorDAO.obtenerTodosProfesorFiltro(ViewState["Orden"].ToString(),nom,leg,ape);
        }
        catch (Exception ex)
        {
            lblResultadoBus.Text = ex.Message.ToString();
            lblResultadoBus.ForeColor = System.Drawing.Color.Red;
        }
        
        grillaProfesores.DataSource = listaProfesor;
        //Se establece identificador unico de la fila
        grillaProfesores.DataKeyNames = new string[] {"IdProfesor"};
        grillaProfesores.DataBind();
        if (listaProfesor.Count != 0)
        {
            lblResultadoBus.Text = "Busqueda Exitosa...";
            lblResultadoBus.ForeColor = System.Drawing.Color.Green;
            panelDatosProfesor.Visible = true;
        }
        else
        {
            lblResultadoBus.Text = "No hay resultados para esa busqueda...";
            lblResultadoBus.ForeColor = System.Drawing.Color.Red;
            panelDatosProfesor.Visible = false;
        }
        
    }
    
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        panelBuscar.Visible = false;
        panelAltaProfesor.Visible = true;
        limpiarAlta();
        cargarTipoDocumento();
        Session["IdProfesor"] = null;
    }
    protected void btnVolver_Click(object sender, EventArgs e)
    {
        panelBuscar.Visible = true;
        panelDatosProfesor.Visible = false;
        panelAltaProfesor.Visible = false;
        limpiarBuscar();
    }
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid)
        {
            lblResAlta.Text = "Algunos de los controles no es valido";
            lblResAlta.ForeColor = System.Drawing.Color.Red;
            return;
        }
        Profesor profe = new Profesor();
        //veo si el viewstate tiene algo para determinar si se trata de una alta o una modificacion
        if (Session["IdProfesor"] != null)
        {
            profe.IdProfesor = int.Parse(Session["IdProfesor"].ToString());
            lblResAlta.Text = "Operacion: Modificar un Profesor";
        }
        else
        {
            profe.IdProfesor = 0;
            lblResAlta.Text = "Operacion: Agregar un nuevo Profesor";
        }

        profe.Nombre = txtNombreAlta.Text;
        profe.Apellido = txtApellidoAlta.Text;
        profe.idTipoDocumento = int.Parse(ddlTipoDocAlta.SelectedValue);
        profe.NumeroDocumento = txtNroDocAlta.Text;
        if (!string.IsNullOrEmpty(txtTelAlta.Text))
            profe.Telefono = txtTelAlta.Text;
        if (!string.IsNullOrEmpty(txtTituloAlta.Text))
            profe.Titulo = txtTituloAlta.Text;
        try
        {
            ProfesorDAO.guardarProfesor(profe);
            panelDatosProfesor.Visible = true;
            cargarGrilla();
            lblResultadoMostrar.Text = "La operacion se realizo con exito...";
            lblResultadoMostrar.ForeColor = System.Drawing.Color.Green;
            limpiarAlta();
        }
        catch (Exception ex)
        {
            lblResAlta.Text = ex.Message.ToString();
            lblResAlta.ForeColor = System.Drawing.Color.Red;
        }
              
    }
    protected void grillaProfesores_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grillaProfesores.PageIndex = e.NewPageIndex;
        cargarGrilla();
        lblResultadoMostrar.Text = string.Empty;
        lblResAlta.Text = string.Empty;
    }
    protected void grillaProfesores_Sorting(object sender, GridViewSortEventArgs e)
    {
        ViewState["Orden"] = e.SortExpression;
        cargarGrilla();
        lblResultadoMostrar.Text = string.Empty;
        lblResAlta.Text = string.Empty;
    }
    protected void grillaProfesores_SelectedIndexChanged(object sender, EventArgs e)
    {
        limpiarAlta();
        cargarTipoDocumento();
        lblResAlta.Text = string.Empty;
        lblResultadoMostrar.Text = string.Empty;
        int idProfesor = int.Parse(grillaProfesores.SelectedDataKey.Value.ToString());
        Profesor profe;
        try
        {
            profe = ProfesorDAO.obtenerProfesorPorId(idProfesor);
            txtNombreAlta.Text = profe.Nombre;
            txtApellidoAlta.Text = profe.Apellido;
            ListItem ltipo = ddlTipoDocAlta.Items.FindByValue(profe.idTipoDocumento.ToString());
            if (ltipo != null)
            {
                ddlTipoDocAlta.ClearSelection();
                ltipo.Selected = true;
            }
            else
            {
                ddlTipoDocAlta.ClearSelection();
                ddlTipoDocAlta.SelectedIndex = 0;
            }
            txtNroDocAlta.Text = profe.NumeroDocumento;
            if (!string.IsNullOrEmpty(profe.Telefono))
                txtTelAlta.Text = profe.Telefono;
            if (!string.IsNullOrEmpty(profe.Titulo))
                txtTituloAlta.Text = profe.Titulo;

            Session["IdProfesor"] = profe.IdProfesor;
            btnEliminar.OnClientClick = string.Format("return confirm('¿Desea eliminar al Profesor {1}, {0}?')", profe.Nombre, profe.Apellido);
        }
        catch (Exception ex)
        {
            lblResultadoMostrar.Text = ex.Message.ToString();
            lblResultadoMostrar.ForeColor = System.Drawing.Color.Red;
        }

        
        panelBuscar.Visible = false;
        panelAltaProfesor.Visible = true;
    }
    private void cargarTipoDocumento()
    {
        try
        {
            ddlTipoDocAlta.DataSource = TipoDocumentoDAO.obtenerTodosTipoDoc();
            ddlTipoDocAlta.DataTextField = "Descripcion";
            ddlTipoDocAlta.DataValueField = "IdTipoDocumento";
            ddlTipoDocAlta.DataBind();
        }
        catch (Exception ex)
        {
            lblTipoDoc.Text = ex.Message.ToString();
            lblTipoDoc.ForeColor = System.Drawing.Color.Red;
        }
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            if (Session["IdProfesor"] != null)
            {
                lblResAlta.Text = "Operacion: Eliminar un Profesor";
                ProfesorDAO.eliminarProfesor(int.Parse(Session["IdProfesor"].ToString()));
                lblResultadoMostrar.Text = "La operacion se realizo con exito...";
                lblResultadoMostrar.ForeColor = System.Drawing.Color.Green;
                limpiarAlta();
                cargarGrilla();
            }
            else
            {
                lblResAlta.Text = "Debe seleccionar un profesor para eliminar...";
                lblResAlta.ForeColor = System.Drawing.Color.Red;
            }
            
        }
        catch (Exception ex)
        {
            lblResAlta.Text = ex.Message.ToString();
            lblResAlta.ForeColor = System.Drawing.Color.Red;
        }
    }
    protected void btnCerrarSesion_Click(object sender, EventArgs e)
    {
        ////Eliminar la cookie
        //Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now;
        ////Terminar la Sesion
        //FormsAuthentication.SignOut();
        //Response.Redirect("~/Publico/InicioWF.aspx");

        //************************************************************
        //Otra forma de eliminar la cookie del equipo del usuario
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            HttpCookie paraBorrar = new HttpCookie(FormsAuthentication.FormsCookieName);
            paraBorrar.Expires = DateTime.Now.AddDays(-1d);
            Response.Cookies.Add(paraBorrar);
        }
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Publico/InicioWF.aspx");
    }
}